﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct stu2
{
	//1.成员列表；
	//char name[21];
	//float scores[3];
	char* name;
	float* scores;
};
//5.方法名命名规则，Java：驼峰法bubbleSort，Linux：int _role_level，Windows：int i_role_level，i是变量类型首字母；
void bubbleSort(struct stu2* p, int len)
{
	//4.冒泡排序；
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - i - 1; j++)
		{
			float sum1 = p[j].scores[0] + p[j].scores[1] + p[j].scores[2];
			float sum2 = p[j + 1].scores[0] + p[j + 1].scores[1] + p[j + 1].scores[2];
			if (sum1 > sum2)
			{
				struct stu2 temp = p[j];
				p[j] = p[j + 1];
				p[j + 1] = temp;
			}
		}
	}
}

//main128：案例：结构体形参实现学生按成绩升序排名
int main128()
{
	struct stu2* p = (struct stu2*)malloc(sizeof(struct stu2) * 3);
	for (int i = 0; i < 3; i++)
	{
		p[i].name = (char*)malloc(sizeof(char) * 21);
		p[i].scores = (float*)malloc(sizeof(float) * 3);
		printf("1.请您输入，学生姓名，成绩：\n");
		scanf("%s%f%f%f", p[i].name, &p[i].scores[0], &p[i].scores[1], &p[i].scores[2]);
		//张三 98 89 96		李四 80 87 88		王五 78 76 79
	}

	bubbleSort(p, 3);

	for (int i = 0; i < 3; i++)
	{
		printf("姓名：%s\n", p[i].name);//姓名：尼古拉斯

		//3.%.1f是保留一位小数输出的意思；
		printf("成绩：%.1f	%.1f	%.1f\n", p[i].scores[0], p[i].scores[1], p[i].scores[2]);//成绩：100.0     200.0   300.0
	}

	/*姓名：王五
	成绩：78.0      76.0    79.0
	姓名：李四
	成绩：80.0      87.0    88.0
	姓名：张三
	成绩：98.0      89.0    96.0*/

	//2.释放堆内存；
	for (int i = 0; i < 3; i++)
	{
		free(p[i].name);
		free(p[i].scores);
	}
	free(p);

	system("pause");
	return EXIT_SUCCESS;
}